package com.gxc.array;

import java.util.*;

/**
 * AI识别到面板上有N（1 ≤ N ≤ 100）个指示灯，灯大小一样，任意两个之间无重叠。
 *
 * 由于AI识别误差，每次识别到的指示灯位置可能有差异，以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1，右下角x2,y2)，
 *
 * 请输出先行后列排序的指示灯的编号，排序规则：
 *
 * 每次在尚未排序的灯中挑选最高的灯作为的基准灯，
 * 找出和基准灯属于同一行所有的灯进行排序。两个灯高低偏差不超过灯半径算同一行（即两个灯坐标的差 ≤ 灯高度的一半）。
 *
 * 思路：
 * 每次在尚未排序的灯中挑选最高的灯作为的基准灯，---按照y1排序
 * 找出和基准灯属于同一行所有的灯进行排序。两个灯高低偏差不超过灯半径算同一行（即两个灯坐标的差 ≤ 灯高度的一半）。----2y1-1y1<height  height=(y2-y1)/2
 */
public class AIRecognition {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        PriorityQueue<Item> queue = new PriorityQueue<>();
        for (int i = 0; i < n; i++) {
            int id = scanner.nextInt();
            int x1 = scanner.nextInt();
            int y1 = scanner.nextInt();
            int x2 = scanner.nextInt();
            int y2 = scanner.nextInt();
            Item item = new Item(id, x1, y1, (y2-y1)/2);
            queue.offer(item);
        }

        while (!queue.isEmpty()) {
            Item first = queue.poll();
            if (queue.isEmpty() || (queue.peek().getY() - first.getY()) > first.getHeight()) {
                System.out.print(first.getId() + " ");
            } else {
                List<Item> list = new ArrayList<>();
                list.add(first);
                while (!queue.isEmpty() && (queue.peek().getY() - first.getY()) <= first.getHeight()) {
                    list.add(queue.poll());
                }
                list.sort(Comparator.comparingInt(Item::getX));
                for (int i = 0; i < list.size(); i++) {
                    System.out.print(list.get(i).getId() + " ");
                }
                scanner.close();
            }
        }

    }

}

class Item implements Comparable<Item> {

    private Integer id;
    private Integer x;
    private Integer y;
    private Integer height;

    public Item(Integer id, Integer x, Integer y, Integer height) {
        this.id = id;
        this.x = x;
        this.y = y;
        this.height = height;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getX() {
        return x;
    }

    public void setX(Integer x) {
        this.x = x;
    }

    public Integer getY() {
        return y;
    }

    public void setY(Integer y) {
        this.y = y;
    }

    public Integer getHeight() {
        return height;
    }

    public void setHeight(Integer height) {
        this.height = height;
    }

    @Override
    public int compareTo(Item o) {
        return Integer.compare(this.y, o.y);
    }
}
